home *** CD-ROM | disk | FTP | other *** search
/ The CICA Windows Explosion! / The CICA Windows Explosion! - Disc 2.iso / programr / wtj208.zip / FRANTZ / VB / VBTARGET.C < prev    next >
C/C++ Source or Header  |  1993-04-10  |  4KB  |  138 lines

  1. /* ------------------------------ VBTARGET.C --------------------------
  2.  *    Target Custom Control for VB
  3.  * ---------------------------------------------------------------- */
  4.  
  5. #include <Windows.h>
  6. #include <vbapi.h>
  7.  
  8. #include "Target.h"
  9. #include "VBTarget.h"
  10.  
  11. #define ERR_PF    32000
  12.  
  13. /* -------------------------- vbmSetProperty ------------------------
  14.  *    Processes VBM_SETPROPERTY
  15.  *        iProp (wParam) is property index
  16.  *        lVal (lParam) is property contents
  17.  * ---------------------------------------------------------------- */
  18.  
  19. static VOID vbmSetProperty (HCTL hCtl, HWND hWnd, WORD iProp, DWORD lVal)
  20. {
  21. PTARGET            pTarget;
  22.  
  23.     switch (iProp)
  24.     {
  25.     case IPROP_TARGET_XPOS:
  26.     case IPROP_TARGET_YPOS:
  27.         pTarget = VBDerefControl (hCtl);
  28.         SendMessage (hWnd, TGM_SETPOS, 0,
  29.                     MAKELONG (VBXTwipsToPixels(pTarget->XPos),
  30.                                 VBYTwipsToPixels(pTarget->YPos)));
  31.         break;
  32.  
  33.     case IPROP_TARGET_TYPE:
  34.         pTarget = VBDerefControl (hCtl);
  35.         SetWindowLong (hWnd, GWL_STYLE,
  36.             (GetWindowLong (hWnd, GWL_STYLE) & 0xFFFFFFF8L) | pTarget->Type);
  37.         InvalidateRect (hWnd, NULL, TRUE);
  38.         break;
  39.     }
  40.  
  41.     return;
  42. }
  43.  
  44. /* -------------------------- vbmCheckProperty ----------------------
  45.  *    Processes VBM_CHECKPROPERTY
  46.  *        iProp (wParam) is property index
  47.  *        lVal (lParam) is property contents
  48.  * ---------------------------------------------------------------- */
  49.  
  50. static LONG vbmCheckProperty (HCTL hCtl, HWND hWnd, WORD iProp, DWORD lVal)
  51. {
  52. PIC                pic;
  53. LONG            lRet = 0;
  54.  
  55.     switch (iProp)
  56.     {
  57.     case IPROP_TARGET_PICTURE:
  58.         VBGetPic ((HPIC)lVal, &pic);
  59.         if (pic.picType == PICTYPE_BITMAP || pic.picType == PICTYPE_NONE)
  60.         {
  61.             SendMessage (hWnd, TGM_SETBMP,
  62.                 pic.picType == PICTYPE_BITMAP? pic.picData.bmp.hbitmap: NULL, 0L);
  63.             InvalidateRect (hWnd, NULL, TRUE);
  64.         }
  65.  
  66.         else
  67.         {
  68.             VBSetErrorMessage (ERR_PF, "Picture should be Bitmap or None");
  69.             lRet = ERR_PF;
  70.         }
  71.         break;
  72.     }
  73.  
  74.     return lRet;
  75. }
  76.  
  77. /* -------------------------- vbnCommand ----------------------------
  78.  *    Processes VBN_COMMAND
  79.  * ---------------------------------------------------------------- */
  80.  
  81. static VOID vbnCommand (HCTL hCtl, HWND hWnd, int id, HWND hCtrl, int nNotify)
  82. {
  83. PTARGET            pTarget;
  84. DWORD            dwPos;
  85.  
  86.     if (nNotify = TGN_CHANGE)
  87.     {
  88. // ---- Get new position
  89.         dwPos = SendMessage (hWnd, TGM_GETPOS, 0, 0L);
  90.  
  91. // ---- Stores it in property structure
  92.         pTarget = VBDerefControl (hCtl);
  93.         pTarget->XPos = VBXPixelsToTwips (LOWORD (dwPos));
  94.         pTarget->YPos = VBYPixelsToTwips (HIWORD (dwPos));
  95.  
  96. // ---- Fires event
  97.         VBFireEvent (hCtl, IEVENT_TARGET_CHANGE, NULL);
  98.     }
  99. }
  100.  
  101. /* -------------------------- TargetCtlProc --------------------------
  102.  *    Target Control Procedure
  103.  * ---------------------------------------------------------------- */
  104.  
  105. LRESULT CALLBACK _export TargetCtlProc (HCTL hCtl, HWND hWnd,
  106.                                 WORD wMsg, WORD wParam, LONG lParam)
  107. {
  108. LRESULT            lRet = 0;            // Return value
  109. BOOL            fCallVB = FALSE;    // Indicates "Do not Call VB"
  110.  
  111. // ---- Message preprocessing
  112.     switch (wMsg)
  113.     {
  114. // ---- VB Messages
  115.     case VBM_SETPROPERTY:
  116.         vbmSetProperty (hCtl, hWnd, wParam, lParam);
  117.         break;
  118.  
  119.     case VBM_CHECKPROPERTY:
  120.         lRet = vbmCheckProperty (hCtl, hWnd, wParam, lParam);
  121.         break;
  122.  
  123.     case VBN_COMMAND:
  124.         vbnCommand (hCtl, hWnd, wParam, LOWORD (lParam), HIWORD (lParam));
  125.         break;
  126.  
  127.     default:
  128.         fCallVB = TRUE;
  129.         break;
  130.     }
  131.  
  132. // ---- Pass Message to VB's Control Proc
  133.     if (fCallVB)
  134.         lRet = VBDefControlProc(hCtl, hWnd, wMsg, wParam, lParam);
  135.  
  136.     return lRet;
  137. }
  138.